package la.foton.homebroker.negocio.service;

import java.util.ArrayList;
import java.util.List;

import com.sun.xml.internal.ws.policy.privateutil.PolicyUtils.Collections;

import la.foton.homebroker.integracao.megabolsa.MegaBolsaAdapter;
import la.foton.homebroker.integracao.megabolsa.dto.OfertaDTO;
import la.foton.homebroker.negocio.dao.AcaoDAO;
import la.foton.homebroker.negocio.dao.CorretoraDAO;
import la.foton.homebroker.negocio.entidade.Acao;
import la.foton.homebroker.negocio.entidade.BookOfertas;
import la.foton.homebroker.negocio.entidade.Oferta;
import la.foton.homebroker.negocio.entidade.enumeracoes.TipoAcao;
import la.foton.homebroker.negocio.entidade.enumeracoes.TipoOperacao;

public class VisualizaBookOfertasService {

	private MegaBolsaAdapter megaBolsaAdapter;
	private AcaoDAO acaoDAO;
	private CorretoraDAO corretoraDAO;
	
	public BookOfertas carregaTodasOfertas() {
		return carregaOfertas(null);
	}
	public BookOfertas carregaOfertas (Acao acao) {
		return converteOfertaDTOparaBookOfertas(megaBolsaAdapter.consultaOfertaEspecifica(acao.getCodigo()));
	}
	
	
	
	private BookOfertas converteOfertaDTOparaBookOfertas(List<OfertaDTO> lOfertaDTO) {
		BookOfertas bookOfertas = new BookOfertas();
		List<Oferta> ofertasCompra = new ArrayList<Oferta>();
		List<Oferta> ofertasVenda = new ArrayList<Oferta>();
		
		
		for (OfertaDTO ofertaDTO : lOfertaDTO) {
			if (ofertaDTO.getTipoOperacao().equals(TipoOperacao.COMPRA.name())) {
				ofertasCompra.add(converteOfertaDTOparaOferta(ofertaDTO));
			}
		}

		bookOfertas.setOfertasCompra(ofertasCompra);
		bookOfertas.setOfertasVenda(ofertasVenda);
		
		return bookOfertas;
	}
	
	
	private Oferta converteOfertaDTOparaOferta(OfertaDTO ofertaDTO) {
		Oferta oferta = new Oferta();
		oferta.setAcao(acaoDAO.busca(ofertaDTO.getCodigoAcao()));
		oferta.setCorretora(corretoraDAO.busca(ofertaDTO.getNomeCorretora()));
		oferta.setDataOferta(ofertaDTO.getData());
		oferta.setQuantidadeAcao(oferta.getQuantidadeAcao());
		if (ofertaDTO.getTipoOperacao().equals(TipoOperacao.COMPRA.name())) {
			oferta.setTipoOperacao(TipoOperacao.COMPRA);	
		} else {
			oferta.setTipoOperacao(TipoOperacao.VENDA);
		}
		
		oferta.setValorAcao(ofertaDTO.getPreco());
		return oferta;

	}
}
